<?php defined('BASEPATH') OR exit('No direct script access allowed');

/**
 * Processos_model
 * @author Thiago Braga <thiago@sitesg.com.br>
 * @access protected
 * @version 1.0
 */
class Processos_model extends CI_Model {

  /**
   * Seleciona todos os processos
   * @param int $id ID do processo
   * @return object
   * @since 1.0
   */
  public function select_processos($id = false) {
    return $id ?
      $this->db->query("
        SELECT
          p.id,
          p.numero,
          p.ordem,
          p.valor,
          p.proximo_andamento,
          p.profissao_requerido,
          p.estado_civil_requerido,
          p.endereco_requerido,
          p.cpf_requerido,
          p.rg_requerido,
          p.nome_requerido,
          j.descricao AS jurisdicao,
          GROUP_CONCAT(DISTINCT u.login) AS cpf_requerente,
          GROUP_CONCAT(DISTINCT u.nome) AS nome_requerente,
          GROUP_CONCAT(DISTINCT prof.nome SEPARATOR '<br />') AS advogados
        FROM
          processos p
        INNER JOIN
          processos_requerentes r ON r.processo = p.id
        INNER JOIN
          processos_profissionais pprof ON pprof.processo = p.id
        INNER JOIN
          usuarios u ON u.id = r.usuario
        INNER JOIN
          usuarios prof ON prof.id = pprof.profissional
        INNER JOIN
          jurisdicao j ON j.id = p.jurisdicao
        WHERE
          MD5(CONCAT('MB', p.id, 'SG')) = '$id'
        GROUP BY
          p.id
        LIMIT 1;")->row() :

      $this->db->query("
        SELECT
          p.id,
          p.numero,
          p.ordem,
          p.nome_requerido,
          GROUP_CONCAT(DISTINCT r.nome ORDER BY r.nome) AS nome_requerente
        FROM
          processos p
        INNER JOIN
          processos_requerentes pr ON pr.processo = p.id
        INNER JOIN
          usuarios r ON r.id = pr.usuario
        GROUP BY
          p.id;")->result();
  }

  /**
   * Seleciona as jurisdições
   * @return object Retorna todas as jurisdições
   * @since 1.0
   */
  public function select_jurisdicao() {
    return $this->db->query("
      SELECT
        id,
        descricao
      FROM
        jurisdicao;")->result();
  }

  /**
   * Seleciona os tipos de fases
   * @return object Retorna todas as fases de processo
   * @since 1.0
   */
  public function select_fases() {
    return $this->db->query("
      SELECT
        id,
        descricao
      FROM
        fases;")->result();
  }

  /**
   * Seleciona as fases de um processo.
   * @param [type] $processo [description]
   * @return [type] [description]
   */
  public function select_processos_fases($processo) {
    return $this->db->query("
      SELECT
        f.descricao AS fase,
        p.ocorrencia,
        p.descricao
      FROM
        processos_fases p
      INNER JOIN
        fases f ON f.id = p.fase
      WHERE
        MD5(CONCAT('MB', p.processo, 'SG')) = '$processo'
      ORDER BY
        p.ocorrencia DESC;")->result();
  }

  /**
   * Salva os dados do processo
   * @param Object $data Dados do processo
   * @return Object
   */
  public function save_processo($data) {
    extract($data);
    $date = date('Y-m-d H:m:s');
    $this->db->query("
      INSERT INTO processos VALUES
      (NULL, $jurisdicao, '$cnpj', '$numero', '$ordem', '$nome_requerido',
      '$profissao_requerido', $estado_civil_requerido, '$endereco_requerido',
      '$cpf_requerido', '$rg_requerido', $valor, '$proximo_andamento',
      '$date', '$date', 'A');");

    if ($this->db->affected_rows()) {
      $id = $this->db->insert_id();
      $query = "INSERT INTO processos_profissionais VALUES";
      foreach ($advogado as $key => $value) {
        $query .= "(NULL, $id, $value, '$date', '$date', 'A')";
        $query .= ($key !== end(array_keys($advogado))) ? "," : ";";
      }
      $this->db->query($query);

      $query = "INSERT INTO processos_requerentes VALUES";
      foreach ($usuario as $key => $value) {
        $query .= "(NULL, $id, $value, '$date', '$date', 'A')";
        $query .= ($key !== end(array_keys($usuario))) ? "," : ";";
      }
      $this->db->query($query);

      $result = $this->db->query("
        SELECT id
        FROM usuarios
        WHERE MD5(CONCAT('MB', id, 'SG')) = '{$this->session->userdata('id')}';")->row();

      $this->db->query("
        INSERT INTO log VALUES
        (NULL, {$result->id}, 'Cadastro', 'Processo',
         $id, INET_ATON('{$_SERVER['REMOTE_ADDR']}'), '$date', 'A');");

      return true;
    } else {
      return false;
    }
  }

  /**
   * [save_fases description]
   * @param [type] $data [description]
   * @return [type] [description]
   */
  public function save_fases($data) {
    extract($data);
    $date = date('Y-m-d H:m:s');
    $result = $this->db->query("
      SELECT id
      FROM processos
      WHERE MD5(CONCAT('MB', id, 'SG')) = '$processo'
      LIMIT 1;")->row();

    $this->db->query("
      INSERT INTO processos_fases VALUES
      (NULL, {$result->id}, $fase, '$descricao', '$ocorrencia', '$date', '$date', 'A');");

    return $this->db->affected_rows();
  }


  /**
   * Verifica se existe um usuário com o CPF informado
   * @param string $cpf CPF a ser verificado
   */
  public function check_cpf($cpf) {
    return $this->db->query("
      SELECT
        id,
        login,
        nome
      FROM
        usuarios
      WHERE
        login = '$cpf'
      LIMIT 1;")->row();
  }

}

/* End of file processos_model.php */
/* Location: ./application/models/processos_model.php */